/**
 * Copyright (C), 2018-2018
 * FileName: fBo  * Author:   lcsos
 * Date:     2018/10/11 16:33
 * Description:
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.qdu.study.arithmetic.first;

import java.util.Scanner;

/**
 * 〈一句话功能简述〉<br>  
 *  斐波那契函数
 *  f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2) (n>=2)
 *  1、递归算法
 *  2、常规算法
 *  3、数组算法
 * @author Lcs
 * @create 2018/10/11 
 * @since 1.0.0
 */

public class fBo {
    //斐波那契函数,递归算法
    public static int fbi(int n){
        //f(1)=1;f(2)=1
        if(n == 1 || n == 2){
            return 1;
        }
        else{
            //进行递归
            return fbi(n-1)+fbi(n-2);
        }
    }

    public static void main(String[] args) {
       // 1.递归算法
        System.out.println("请输入整数n:");

        Scanner s = new Scanner(System.in);
        int n = s.nextInt();

        for (int i = 1;i<=n;i++){
            System.out.println("fbi("+ i +") = "+fbi(i));
        }

//------------------------------------------------------------------

        //2.常规算法
//        int a = 1,b=1,c=0;
//
//        System.out.println("请输入整数n:");
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//
//        for (int i = 1;i<=n;i++){
//            if (i == 1 ){
//                //f(1)=1
//                System.out.println("fbi("+ i +") = "+a);
//            }
//            else if(i == 2){
//                //f(2)=1
//                System.out.println("fbi("+ i +") = "+b);
//            }
//            else {
//                //1 1 2 3 5
//                //a b c
//                //  a b c
//                //    a b c
//                c = a + b;
//                a = b;
//                b = c;
//                System.out.println("fbi("+ i +") = "+ c);
//            }
//        }

//  ---------------------------------------------------------------
//            //3.数组方式
//        System.out.println("请输入整数n:");
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int[] arrayList = new int[n];
//        //数组中第一个和第二个存为1
//        arrayList[0] = arrayList[1] = 1;
//
//        for(int i = 0;i<arrayList.length;i++){
//            //f(1)=1
//            if (i == 0){
//                System.out.println("fbi("+ (i+1) +") = "+arrayList[0]);
//            }
//            //f(2)=2
//            else if(i == 1){
//                System.out.println("fbi("+ (i+1) +") = "+arrayList[1]);
//            }
//            else {
//                arrayList[i] = arrayList[i-1] + arrayList[i-2];
//                System.out.println("fbi("+ (i+1) +") = "+arrayList[i]);
//            }
//        }

//  --------------------------------------------------------------------------

    }
}
